import org.junit.Test;
import org.omg.Messaging.SyncScopeHelper;

import java.util.Arrays;

/**
 * 数组 Array
 * 数组相当于一堆相同的数据类型的数据；
 */
public class 数组 {
    //1.数组的定义：4种，创建数组初始化【静态初始化：给定值、动态初始化：没给定值】
    @Test
    public void testArray(){
        //注意：数组定义长度不能改变
        int[] arr1=new int[4];//Java推荐写法 动态初始化
        int arr2[]=new int[4];//C推荐写法Java兼容 动态初始化
        int[] arr3={1,2,3};//静态初始化数组，元素可以直接使用、
        int[] arr4=new int[]{1,2,3};//动态初始化
        //数组：内部存数据叫做元素？
        //从arr3取出2的元素      数组名 下标
        System.out.println(arr3[1]);
        //获取arr3的长度
        System.out.println(arr3.length);
        //从arr4获取到第四个元素值
        System.out.println(arr4[4]);//报错【数组下标越界异常；下标超出数组长度范围】：ArrayIndexOutOfBoundsException: 4


    }
    /**
     * 数组的迭代（遍历：输出所有元素值）三种
     * 1.普通迭代方法：for
     * 2.增强for方法：推荐，JDK1.5之后
     * 3.工具类：Arrays
     */
    @Test
    public void testIterate(){
        int[] arr={1,2,3,4};//静态初始化数组      数组名【下标】
     //   for(int i=0;i<arr.length;i++){//拿数组下标
     //       System.out.println(arr[i]);
     //   }
            //增强for jdk1.5
     //   for(int j:arr){//增强for语法：（遍历数据类型 引用：数组名）
     //       System.out.println(j);
     //   }
        //工具类：Arrays.toString()直接打印数组元素值
        System.out.println(Arrays.toString(arr));
    }
    @Test
    public void testCopy(){
        //字符数组，数组长度固定：2个
        char[] arr={'唐','山'};//想法：长度增加为4
        //扩容：+4
        Arrays.copyOf(arr,4);
        char [] temp=Arrays.copyOf(arr,4);
        arr=temp;
        arr[2]='工';
        arr[3]='业';
        System.out.println(arr);
        //需求：输出唐山工业
    }
    /**
     * 数组输出元素时，会有一些不同，【查看数据是否是数组】
     * 数据类型：基本+引用
     */
    @Test
    public void testArrays(){
        //字符数组
        char[] china={'中','国'};
        System.out.println(china);//输出：中国  字符串：字符数组
        //输出语句--JavaOOP面向对象：重载，字符数组自动拼接
        //数组数值
        int[] i={1,2};
        System.out.println(i); //输出：【I数据类型@连接符 3d82c5f3地址值】
    }
    /**
     * 冒泡排序：双层排序for循环使用：外层for执行一次，执行全部
     */
    @Test
    public void bubbleSort() {
        //静态初始化数组
        int[] arr={3,6,4,1};//1,3,4,6
        //(1)外层for
        for(int i=0;i<arr.length-1;i++){
            //(2)内层for控制次 j=三轮递减-[3-1]次
            for(int j=0;j< arr.length-1-i;j++){
                //（3）交换：创建第三方数组：接收 1>2 条件成立
                if(arr[j]>arr[j+1]){//【相邻元素】    数组名【下标】
                    //创建第三方数组：接收   变量名：temp
                    int temp=arr[j];//大的元素交给第三方变量保存
                    arr[j]=arr[j+1];//第二个元素交给第一个元素位置
                    arr[j+1]=temp;//保存第三方变量【大数】交给第二个元素
                }
            }
        }
        System.out.println(Arrays.toString(arr));//输出数组【遍历输出】
    }

    @Test
    public void testSort(){
        int[] arr={3,6,4,1};
        //工具类Arrays.sort()f方法排序，默认升序
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));
    }
}






















